Web Streams API
queueを使ってchunk化されたデータを処理する 3種類Streamを繋いで使う
参考
Vercelによるわかりやすい解説
Vercelによる解説
https://gyazo.com/6e0a365bb63f6f2ef0001d0147596507
code:例.ts
const decoder = new TextDecoder();
const encoder = new TextEncoder();
const readableStream = new ReadableStream({
start(controller) {
const text = "Stream me!";
controller.enqueue(encoder.encode(text)); // queueにいれる
controller.close();
},
});
const transformStream = new TransformStream({
transform(chunk, controller) {
// データを取り出して、変換して、再度queueにいれる
const text = decoder.decode(chunk);
controller.enqueue(encoder.encode(text.toUpperCase()));
},
});
const writableStream = new WritableStream({
write(chunk) {
console.log(decoder.decode(chunk)); // 取り出す
},
});
// 呼び出す
// pipeThrough, pipeToを使う
readableStream
.pipeThrough(transformStream)
.pipeTo(writableStream); // STREAM ME!
code:ts
const stream = new WritableStream(...)
async function writeData(data) {
const writer = stream.getWriter();
for (const chunk of data) {
await writer.ready; // Streamに追加で書き込んでよいかの判断
writer.write(chunk);
}
writer.close();
}